# An urgent mail

## Описание
Эй, ты! Снова играешься в рабочее время? А на твою работу, между прочим, жалобы идут! И не откуда-нибудь, а из самого Госнадзора! Ну, чего глаза вылупил? Забыл, как почту читать? Письмо я тебе перекинул, в нём перечислен подробный перечень выявленных нарушений. Хватит гонять чаи, за работу, живо! И чтобы к вечеру всё было устранено. Вернусь - проверю!

### Hint
Троянов бояться - на CTF не ходить!


## WriteUp
Исходный файл в задании представляет собой электронное письмо в формате **EML**, открываемое почтовыми клиентами **(например, MS Outlook)**.

Из информации в теле письма узнаём **пароль** к приаттаченному архиву, распаковываем из него файл и с высокой степенью вероятности получаем срабатывание установленного на машине антивируса.

Понимаем, что с этим файлом стоит быть поосторожнее, и не позволяем себе обманываться, глядя на его имя - на самом деле, это **EXE**, а не **XLS**.

Файл создан **PyInstaller'ом** и дополнительно упакован при помощи **UPX**. Далее есть два пути:
1) Распаковать его и изучить содержащийся в нём код на **Python**;
2) Запустить его в виртуальной машине и в динамике пронаблюдать за поведением.

Так или иначе, мы узнаём, что исследуемый файл создаёт в **%TEMP% bat-файл** и **запускает** его на выполнение вызовом **cmd.exe**.<br> Скопируем этот **bat-файл** и посмотрим, что там внутри.<br>
Как мы видим, **содержимое обфусцировано** и невооруженым глазом понять, что там происходит, проблематично.<br> 
Можно попробовать **деобфусцировать** его, но гораздо **проще заглянуть в Process Monitor** и **увидеть выполняемую сценарием команду**:
```
powershell.exe -nop -c "[string]'$global:progressPreference='+[char]0x27+'silentlyContinue'+[char]0x27+';' + [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(((Get-Content -Path 'filename.bat' -TotalCount 37)[-1]).replace(':','')))|iex"

```
Данная команда запускает скрипт **PowerShell**, который **читает из bat-файла строку 37**, декодирует её содержимое из **base64** и запускает на выполнение как **PowerShell-скрипт**.

Проделав всё то же самое и раскодировав его, снова видим обфускацию. Здесь уже придется вручную деобфусцировать и разбираться, что там внутри творится.

А происходит следующее:
1) Сначала скрипт проверяет наличие подключения к интернету путем запроса информации с **https://google.com**
2) Затем идёт проверка на возможность достучаться до **https://eytqrlibfsmeconx.xyz**
3) Если оба запроса завершились успешно, скрипт **проверяет IP-адрес** машины и продолжает работу, если он равен **192.168.3.78**
4) Далее происходит запрос информации с **https://pastebin.com/raw/TCrumjpZ**, пройдя по этой ссылке получаем строку **01{U2B1Q2B1U3RtZFtb**
5) Изучая скрипт, понимаем, что **01 - это ключ расшифровки**, а **U2B1Q2B1U3RtZFtb - зашифрованные** при помощи **XOR'a** с этим ключом данные, по которым прошлись **base64**
6) **Поняв всё это, получаем флаг**.

В принципе, возможен и альтернативный вариант получения флага: 
1) В пункте 4 вместо скачивания строки мы можем прописать в **hosts** какой-нибудь **"живой" IP адрес** для домена **eytqrlibfsmeconx.xyz**, а **IP-адрес** нашей машины выставить в **192.168.3.78**.

После этого программа должна сама выдать нам флаг.

# Flag

RDG{RatBatRuleZZ}